home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / octa209s.zip / octave-2.09 / src / getrusage.cc < prev    next >
C/C++ Source or Header  |  1996-11-03  |  4KB  |  169 lines

  1. /*
  2.  
  3. Copyright (C) 1996 John W. Eaton
  4.  
  5. This file is part of Octave.
  6.  
  7. Octave is free software; you can redistribute it and/or modify it
  8. under the terms of the GNU General Public License as published by the
  9. Free Software Foundation; either version 2, or (at your option) any
  10. later version.
  11.  
  12. Octave is distributed in the hope that it will be useful, but WITHOUT
  13. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  14. FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  15. for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with Octave; see the file COPYING.  If not, write to the Free
  19. Software Foundation, 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  20.  
  21. */
  22.  
  23. #ifdef HAVE_CONFIG_H
  24. #include <config.h>
  25. #endif
  26.  
  27. #include "systime.h"
  28.  
  29. #ifdef HAVE_SYS_RESOURCE_H
  30. #include <sys/resource.h>
  31. #endif
  32.  
  33. #if defined (HAVE_TIMES) && defined (HAVE_SYS_TIMES_H)
  34.  
  35. #if defined (HAVE_SYS_PARAM_H)
  36. #include <sys/param.h>
  37. #endif
  38. #include <sys/times.h>
  39.  
  40. #if !defined (HZ)
  41. #if defined (CLK_TCK)
  42. #define HZ CLK_TCK
  43. #elif defined (USG)
  44. #define HZ 100
  45. #else
  46. #define HZ 60
  47. #endif
  48. #endif
  49.  
  50. #endif
  51.  
  52. #include "defun-dld.h"
  53. #include "help.h"
  54. #include "oct-map.h"
  55. #include "sysdep.h"
  56. #include "ov.h"
  57. #include "oct-obj.h"
  58. #include "utils.h"
  59.  
  60. #ifndef RUSAGE_SELF
  61. #define RUSAGE_SELF 0
  62. #endif
  63.  
  64. // System resource functions.
  65.  
  66. DEFUN_DLD (getrusage, , ,
  67.   "getrusage ()\n\
  68. \n\
  69. Return system resource statistics.")
  70. {
  71.   Octave_map m;
  72.   Octave_map tv_tmp;
  73.  
  74. #if defined (HAVE_GETRUSAGE)
  75.  
  76.   struct rusage ru;
  77.  
  78.   getrusage (RUSAGE_SELF, &ru);
  79.  
  80.   tv_tmp ["sec"] = (double) ru.ru_utime.tv_sec;
  81.   tv_tmp ["usec"] = (double) ru.ru_utime.tv_usec;
  82.   m ["utime"] = octave_value (tv_tmp);
  83.  
  84.   tv_tmp ["sec"] = (double) ru.ru_stime.tv_sec;
  85.   tv_tmp ["usec"] = (double) ru.ru_stime.tv_usec;
  86.   m ["stime"] = octave_value (tv_tmp);
  87.  
  88. #if ! defined (RUSAGE_TIMES_ONLY)
  89.   m ["maxrss"] = (double) ru.ru_maxrss;
  90.   m ["ixrss"] = (double) ru.ru_ixrss;
  91.   m ["idrss"] = (double) ru.ru_idrss;
  92.   m ["isrss"] = (double) ru.ru_isrss;
  93.   m ["minflt"] = (double) ru.ru_minflt;
  94.   m ["majflt"] = (double) ru.ru_majflt;
  95.   m ["nswap"] = (double) ru.ru_nswap;
  96.   m ["inblock"] = (double) ru.ru_inblock;
  97.   m ["oublock"] = (double) ru.ru_oublock;
  98.   m ["msgsnd"] = (double) ru.ru_msgsnd;
  99.   m ["msgrcv"] = (double) ru.ru_msgrcv;
  100.   m ["nsignals"] = (double) ru.ru_nsignals;
  101.   m ["nvcsw"] = (double) ru.ru_nvcsw;
  102.   m ["nivcsw"] = (double) ru.ru_nivcsw;
  103. #endif
  104.  
  105. #else
  106. #if defined (HAVE_TIMES) && defined (HAVE_SYS_TIMES_H)
  107.  
  108.   struct tms t;
  109.  
  110.   times (&t);
  111.  
  112.   unsigned long ticks;
  113.   unsigned long seconds;
  114.   unsigned long fraction;
  115.  
  116.   ticks = t.tms_utime + t.tms_cutime;
  117.   fraction = ticks % HZ;
  118.   seconds = ticks / HZ;
  119.  
  120.   tv_tmp ["sec"] = (double) seconds;
  121.   tv_tmp ["usec"] = (double) (fraction * 1e6 / HZ);
  122.   m ["utime"] = octave_value (tv_tmp);
  123.  
  124.   ticks = t.tms_stime + t.tms_cstime;
  125.   fraction = ticks % HZ;
  126.   seconds = ticks / HZ;
  127.  
  128.   tv_tmp ["sec"] = (double) seconds;
  129.   tv_tmp ["usec"] = (double) (fraction * 1e6 / HZ);
  130.   m ["stime"] = octave_value (tv_tmp);
  131.  
  132. #else
  133.  
  134.   tv_tmp ["sec"] = 0.0;
  135.   tv_tmp ["usec"] = 0.0;
  136.   m ["utime"] = octave_value (tv_tmp);
  137.  
  138.   tv_tmp ["sec"] = 0.0;
  139.   tv_tmp ["usec"] = 0.0;
  140.   m ["stime"] = octave_value (tv_tmp);
  141.  
  142. #endif
  143.  
  144.   m ["maxrss"] = octave_NaN;
  145.   m ["ixrss"] = octave_NaN;
  146.   m ["idrss"] = octave_NaN;
  147.   m ["isrss"] = octave_NaN;
  148.   m ["minflt"] = octave_NaN;
  149.   m ["majflt"] = octave_NaN;
  150.   m ["nswap"] = octave_NaN;
  151.   m ["inblock"] = octave_NaN;
  152.   m ["oublock"] = octave_NaN;
  153.   m ["msgsnd"] = octave_NaN;
  154.   m ["msgrcv"] = octave_NaN;
  155.   m ["nsignals"] = octave_NaN;
  156.   m ["nvcsw"] = octave_NaN;
  157.   m ["nivcsw"] = octave_NaN;
  158.  
  159. #endif
  160.  
  161.   return octave_value (m);
  162. }
  163.  
  164. /*
  165. ;;; Local Variables: ***
  166. ;;; mode: C++ ***
  167. ;;; End: ***
  168. */
  169.